// Copyright 2007-2010 Comdiv (F. Sadykov) - http://code.google.com/u/fagim.sadykov/
// Supported by Media Technology LTD 
//  
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//  
//      http://www.apache.org/licenses/LICENSE-2.0
//  
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// 
// MODIFICATIONS HAVE BEEN MADE TO THIS FILE
using System.Collections.Generic;
using Boo.Lang.Compiler.Ast;
using MvcContrib.Comdiv.Extensibility.BooLang;

#if MONORAIL
namespace Castle.MonoRail.Views.Brail
#else

namespace MvcContrib.Comdiv.ViewEngines.Brail
#endif
{
    public partial class ForeachMacro{
        #region Nested type: CellMacroBase

        public class CellMacroBase : ForeachSnippet<CellMacro>{
            protected MacroStatement container(MacroStatement macro){
                MacroStatement table = macro.findMacroContainer("astable");
                return table ?? macro.findMacroContainer("astablerows");
            }

            protected void appendCell(MacroStatement macro, CellDefinition definition){
                append(macro, "_cells", definition);
            }

            private void append(MacroStatement macro, string name, CellDefinition definition){
                MacroStatement target = container(macro);
                if (!target.ContainsAnnotation(name)){
                    target.set(name, new List<CellDefinition>());
                }
                var c = target.get<IList<CellDefinition>>(name);
                c.Add(definition);
            }

            protected void appendHead(MacroStatement macro, CellDefinition definition){
                append(macro, "_heads", definition);
            }
        }

        #endregion
    }
}